package com.mofeng.myshop.service.user;


import com.mofeng.myshop.domain.dto.SendEmailDto;
import com.mofeng.myshop.domain.dto.search.UserSearchDto;
import com.mofeng.myshop.domain.dto.user.UserDto;
import com.mofeng.myshop.until.R;

import java.util.List;

public interface UserService {
    /**
     * 初始化Root账号
     */
    R initAdminAccount(UserDto userVo);

    /**
     * 用户注册：仅限于普通用户注册
     *
     * @param user      用户封装类
     * @param emailCode 邮箱验证码
     */
    R register(UserDto user, String emailCode);

    /**
     * 登录
     *
     * @param user 用户封装类
     */
    R login(UserDto user);

    /**
     * 获取用户信息
     *
     * @param userId 用户ID
     */
    R getUserInfo(String userId);

    /**
     * 修改用户信息 自己
     *
     * @param user 用户修改的信息
     */
    R updateUserInfo(UserDto user);

    /**
     * 删除用户 root权限
     *
     * @param userIdList 用户的ID
     */
    R deleteUser(List<String> userIdList);

    /**
     * 查询用户列表 管理员以上权限
     *
     * @param userSearchVo 用户的搜索信息
     */
    R userListAdmin(UserSearchDto userSearchVo);

    /**
     * 查询用户列表 管理员以上权限
     *
     * @param userSearchVo 用户的搜索信息
     */
    R userListPortal(UserSearchDto userSearchVo);

    /**
     * root用户 修改用户信息 需要root权限
     */
    R adminUpdateUserInfo(UserDto userVo);

    /**
     * 修改邮箱
     *
     * @param email      邮箱
     * @param verifyCode 邮箱验证码
     */
    R updateEmail(String email, String verifyCode);

    /**
     * 退出登录
     */
    R logout();

    /**
     * 获取登录用户信息
     */
    R getLoginUser();

    /**
     * Root重置用用户密码
     *
     * @param userId   用户ID
     * @param password 密码
     */
    R resetPassword(String userId, String password);

    /**
     * 修改密码（用户）邮箱
     *
     * @param email       邮箱
     * @param newPassword 新密码
     * @param emailCode   邮箱验证码
     */
    R updatePassword(String email, String newPassword, String emailCode);

    /**
     * 修改手机号
     *
     * @param phone      手机号
     * @param verifyCode 手机验证码
     */
    R updatePhone(String phone, String verifyCode);

    /**
     * 管理员 添加新用户
     */
    R addUserAdmin(UserDto user);

    /**
     * 修改 用户信息
     */
    R updateUser(UserDto user);

    /**
     * 管理员 授权用户
     */
    R empower(String id);

    /**
     * 管理员 封禁用户
     */
    R banUser(String id);

    /**
     * 发送邮件
     *
     * @param sendEmailDto 邮件信息
     */
    R sendEmail(SendEmailDto sendEmailDto);

    /**
     * 领取新人奖励
     * @param addressId 地图ID
     */
    R receiveGift(String addressId);

    /**
     * 填写邀请码
     *
     * @param invitationCode 邀请码
     * @return 0
     */
    R invitation(String invitationCode);

    /**
     * 获取余额排行榜
     * @param size 获取数量
     */
    R amountRanking(int size);


}
